#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
问题1：统计分析志愿者的活动情况
根据加速度记录数据，统计汇总附件1中各个志愿者的身体活动信息。
"""

import os
import sys
import pandas as pd
import numpy as np

# 获取当前文件所在目录
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)  # 获取父目录

# 导入ActivityMonitor类
from res import ActivityMonitor

def main():
    print("开始执行问题1 - 统计分析志愿者的活动情况...")
    
    # 检查文件路径 (基于父目录)
    file_dir = os.path.join(parent_dir, "file")
    
    # 首先检查是否有附件1文件夹
    folder_path = os.path.join(file_dir, "附件1")
    if os.path.isdir(folder_path):
        print(f"找到附件1文件夹，将使用文件夹中的数据")
        attachment_path = folder_path
    else:
        # 尝试附件1.csv文件
        attachment_path = os.path.join(file_dir, "附件1.csv")
        if not os.path.exists(attachment_path):
            print(f"错误: 找不到文件 {attachment_path} 或文件夹 {folder_path}")
            print("请将「附件1.csv」文件放在file文件夹中，或确保存在附件1文件夹")
            return
    
    print(f"使用数据源: {attachment_path}")
    
    # 创建活动监测器
    monitor = ActivityMonitor()
    
    # 读取数据（直接检查文件）
    if os.path.isfile(attachment_path):
        try:
            data = pd.read_csv(attachment_path, encoding='utf-8')
            print(f"成功读取数据，行数: {len(data)}，列数: {data.shape[1]}")
            print(f"列名: {data.columns.tolist()}")
            
            # 检查是否有必要的列
            if 'pid' not in data.columns or 'MET' not in data.columns:
                print("警告: 数据文件中缺少必要的列 (pid 或 MET)")
                print(f"现有列: {data.columns.tolist()}")
                
                # 如果没有MET列但有加速度数据，可以计算MET
                if all(col in data.columns for col in ['acc_x', 'acc_y', 'acc_z']):
                    print("检测到加速度数据，可以计算MET值...")
                
        except Exception as e:
            print(f"读取数据文件时出错: {e}")
            # 尝试不同的编码
            try:
                print("尝试使用不同的编码格式...")
                data = pd.read_csv(attachment_path, encoding='gbk')
                print(f"使用GBK编码成功读取数据，行数: {len(data)}")
            except Exception as e2:
                print(f"使用GBK编码仍然失败: {e2}")
                return
    
    # 执行统计分析
    output_file = os.path.join(parent_dir, "result_1.xlsx")
    result = monitor.analyze_volunteer_activity(input_path=attachment_path, output_file=output_file)
    
    if result is not None:
        print(f"\n统计结果示例（前5行）:")
        print(result.head().to_string(index=False))
        print(f"\n结果已保存至: {output_file}")
        print("处理完成!")
    else:
        print("统计分析失败，请检查数据文件格式是否正确。")

if __name__ == "__main__":
    try:
        main()
    except Exception as e:
        print(f"\n程序运行出错: {e}")
    
    print("\n按回车键退出...")
    input() 